package cn.itcalvin.vo;


/**
 * @description: 消息工具
 * @author: calvin
 **/

public class MessageUtil {
    /**
     * 成功并返回数据实体类
     * @param o
     * @param <E>
     * @return
     */
    public static <E> Message<E> success(E o){
        return new Message<>(ResultStatus.SUCCESS.value(), ResultStatus.SUCCESS.getReasonPhrase(), o,null, System.currentTimeMillis());
    }
    /**
     * 成功并返回数据实体类
     * @param o
     * @param <E>
     * @return
     */
    public static <E> Message<E> success(E o, Long total){
        return new Message<>(ResultStatus.SUCCESS.value(), ResultStatus.SUCCESS.getReasonPhrase(), o,total, System.currentTimeMillis());
    }
    /**
     * 成功并返回数据实体类
     * @param o
     * @param <E>
     * @return
     */
    public static <E> Message<E> success(E o, String message){
        return new Message<>(ResultStatus.SUCCESS.value(), message, o,null, System.currentTimeMillis());
    }
    /**
     * 成功，但无数据实体类返回
     * @return
     */
    public static <E> Message<E> success(){
        return new Message<>(ResultStatus.SUCCESS.value(), ResultStatus.SUCCESS.getReasonPhrase(), null, null, System.currentTimeMillis());
    }

    /**
     * 失败，有自定义异常返回
     * @param msg
     * @return
     */
    public static <E> Message<E> error(String msg){
        return new Message<>(ResultStatus.FAILED.value(), msg, null, null, System.currentTimeMillis());
    }
    /**
     * 失败，有自定义异常返回
     * @param emStatus
     * @param msg
     * @return
     */
    public static <E> Message<E> error(ResultStatus emStatus, String msg){
        return new Message<>(emStatus.value(), msg, null, null, System.currentTimeMillis());
    }
    /**
     * 失败，有自定义异常返回
     * @param emStatus
     * @return
     */
    public static <E> Message<E> error(ResultStatus emStatus){
        return new Message<>(emStatus.value(), emStatus.getReasonPhrase(), null, null, System.currentTimeMillis());
    }
    /**
     * 失败，有自定义异常返回
     * @param emStatus
     * @param data
     * @return
     */
    public static <E> Message<E> error(ResultStatus emStatus, E data){
        return new Message<>(emStatus.value(), emStatus.getReasonPhrase(), data, null, System.currentTimeMillis());
    }
    /**
     * 失败，有自定义异常返回
     * @param code
     * @param msg
     * @return
     */
    public static <E> Message<E> error(Integer code, String msg){
        return new Message<>(code, msg, null,null, System.currentTimeMillis());
    }
    /**
     * 失败，有自定义异常返回
     * @param code
     * @param msg
     * @return
     */
    public static <E> Message<E> error(Integer code, String msg, E o){
        return new Message<>(code, msg, o, null, System.currentTimeMillis());
    }

    /**
     * 成功并返回数据实体类
     * @param o
     * @param total
     * @param <E1>
     * @param <E2>
     * @return
     */
    public static <E1,E2> MessageExt<E1,E2> success(E1 o, E2 total){
        return new MessageExt<>(ResultStatus.SUCCESS.value(), ResultStatus.SUCCESS.getReasonPhrase(), o,total,null, System.currentTimeMillis());
    }

    /**
     * 失败，有自定义异常返回
     * @param msg
     * @return
     */
    public static <E1,E2> MessageExt<E1,E2>  errorExt(String msg){
        return new MessageExt<E1,E2>(ResultStatus.FAILED.value(), msg,null, null, null, System.currentTimeMillis());
    }

}